package com.deyuanyun.pic.settings.task.factory;

import com.deyuanyun.pic.common.tool.Globals;
import org.quartz.impl.StdSchedulerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.util.ReflectionUtils;

import java.lang.reflect.Field;
import java.util.Properties;

/**
 *  根据properties文件中的jobPersistent字段动态的设置quartz是把任务保存在内存中还是保存在数据库中
 *  @author axiao(xj08.dream@gmail.com)
 *  @date 2016-07-29
 *  @version 1.0
 *  Histroy: [修改人][时间][描述]
 */
public class QuartzSchedulerFactoryBean extends SchedulerFactoryBean {

    @Value("${jobPersistent}")
    private boolean jobPersistent = false; //是否持久化

    @Value("${dev_mod}")
    private boolean dev = false;//是否是开发模式

    @Override
    public void afterPropertiesSet() throws Exception {
        if(dev) { //开发模式下不初始化任务调度
            return;
        }
        Field field = ReflectionUtils.findField(this.getClass(), "quartzProperties");
        field.setAccessible(true);
        Properties properties = (Properties) field.get(this);//使用反射得到quartzProperties，防止在spring.xml中配置了该值的时候得不到已设置的
        if (!jobPersistent) { //不是持久化的时候清空xml中配置的transactionManager和dataSource
            super.setDataSource(null);
            super.setTransactionManager(null);
            //properties.put("org.quartz.jobStore.driverDelegateClass", "");
        }
        if (null != properties)
            super.setQuartzProperties(properties);
        //调用父类的afterPropertiesSet方法，执行quartz的初始化操作
        super.afterPropertiesSet();
    }
}
